package com.yiwenup.leetcode.top_interview_150;

/**
 * 文件描述
 *
 * @Project struct-algorithm
 * @Package com.yiwenup.leetcode.top_interview_150
 * @Author yiwenup
 * @Date 2024-12-04 18:26:34
 * @Description https://leetcode.cn/problems/climbing-stairs/?envType=study-plan-v2&envId=top-interview-150
 * <pre>
 *     假设你正在爬楼梯。需要 n 阶你才能到达楼顶。
 *     每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢？
 * </pre>
 * <pre>
 *     输入：n = 2
 *     输出：2
 *     解释：有两种方法可以爬到楼顶。
 *     1. 1 阶 + 1 阶
 *     2. 2 阶
 * </pre>
 * <pre>
 *     输入：n = 3
 *     输出：3
 *     解释：有三种方法可以爬到楼顶。
 *     1. 1 阶 + 1 阶 + 1 阶
 *     2. 1 阶 + 2 阶
 *     3. 2 阶 + 1 阶
 * </pre>
 */
public class No0070 {

    public int climbStairs(int n) {
        if (n == 1 || n == 2) return n;

        int i = 1, j = 2, tmp;
        for (int k = 3; k <= n; k++) {
            tmp = i;
            i = j;
            j += tmp;
        }

        return j;
    }

    public int climbStairs2(int n) {
        if (n == 1) return 1;
        if (n == 2) return 2;

        int i = 1, j = 2, temp;
        for (int k = 3; k <= n; k++) {
            temp = i;
            i = j;
            j += temp;
        }
        return j;
    }

    public static void main(String[] args) {
        System.out.println(new No0070().climbStairs(3));
    }
}
